package common

import (
	"fmt"
	"log"
	"os"
	"os/exec"
	"path/filepath"
	"reflect"
)

func MakeRun(mock *Mock, host string, cmd string) error {

	// 获取当前工作目录，这应该是项目的根目录
	wd, err := os.Getwd()
	wd = filepath.Dir(wd)
	if err != nil {
		return err
	}

	// 创建exec.Cmd结构体，设置工作目录并运行make命令
	command := exec.Command("make", cmd)

	// 构建Makefile的相对路径
	makefilePath := filepath.Join(wd, "common", "script", host)
	command.Dir = makefilePath // 设置工作目录为Makefile所在的目录

	// 获取当前环境变量，并添加新变量，给Makefile传递参数
	env := os.Environ()

	// 使用反射从Mock对象获取参数
	mockVal := reflect.ValueOf(*mock)
	mockType := mockVal.Type()
	for i := 0; i < mockVal.NumField(); i++ {
		field := mockVal.Field(i)
		env = append(env, fmt.Sprintf("%s=%s", mockType.Field(i).Name, field.Interface()))
	}
	command.Env = env

	// 运行命令
	output, err := command.CombinedOutput()
	log.Println(string(output))
	if err != nil {
		return err
	}

	return nil
}
